Hive 报错 INSERT INTO “PARTITION 您所在的位置:网站首页 param error -- title invalid Hive 报错 INSERT INTO “PARTITION

Hive 报错 INSERT INTO “PARTITION

2024-07-13 00:14| 来源: 网络整理| 查看: 265

问题背景

Hive 中加工了几张大表, 每张都大约有 350 个字段左右. 并且因为业务原因每个字段都比较长 (大约20个字符左右, 有长有短, 最长可达30多个字符). 加工完成, 多次确认不存在语法错误后运行, 仍然报错.

此时,这几张运行失败的表有共同特点, 可以作为后续处理失败的突破点: 每张表的字段很多, 且每个字段都很长.

报错信息

[ERROR] Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.MoveTask. MetaException(message:Put request failed : INSERT INTO "PARTITION_PARAMS" ("PARAM_VALUE","PART_ID","PARAM_KEY") VALUES (?,?,?) )

问题定位

通过后台日志发现具体报错信息: 在这里插入图片描述

报错显示: PostgreSQL Error, 值太长.联想到, 我们 Hive 的元数据库就是使用 PostgreSQL 引擎, 那说明是元数据中的表出现问题(INSERT INTO "PARTITION_PARAMS" ("PARAM_VALUE","PART_ID","PARAM_KEY") VALUES (?,?,?) )进入元数据库中, 查找 PARTITION_PARAMS 表, 找到问题. 在这里插入图片描述 产生原因

经过一番分析, 原来是 Hive 在元数据库中对每张表所有字段长度的累加总长度有限制, 如上图为 varchar(4000). 而我们今天加工的几张表字段总长≈350*20=7000, 导致实际存储字段总长大于定义.

解决

修改元数据库中的 PARTITION_PARAMS 表 PARAM_VALUE 字段对应值:

alter table "PARTITION_PARAMS" alter column "PARAM_VALUE" type varchar(8000);

至此, 再次执行则均运行成功!

或者, 另一种处理思路: 加工太大的表可以使用拆分成几个小表, 在使用时再通过主键关联.



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有